- 浏览: 545759 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
q649916440:
使用这个的目的是什么呢?感觉没啥优势啊,用起来还绕个大圈
使用googleapi-client-java操作gtasks(一) -
文艺吧网:
还有一个GZIP的问题,我怎么转都乱码最后是因为要解压一下ht ...
关于使用InputStreamReader读取GBK编码文件乱码的问题 -
xiaodousa:
9楼正解!
Android在Listview中使用EditText -
fxiaozj:
zyp09 写道很想知道在Mainactivity界面怎么获得 ...
Android PreferenceActivity 学习笔记 -
zylc369:
楼主很用心,一定要顶
Android通过共享用户ID来实现多Activity进程共享
在程序开发中,android系统控件提供的外观往往距离我们要求的有一定差距,
此时我们可以通过一些方法来修改。
本文只讨论外观修改,在系统控件上进行功能扩充的自定义控件另外讨论。
首先我们看下系统的RadioButton:
RadioButton长成什么样子是由其Background、Button等属性决定的,Android系统
使用style定义了默认的属性,在android源码
android/frameworks/base/core/res/res/values/styles.xml中可以看到默认的定义:
即其背景图是btn_radio_label_background,其button的样子是btn_radio
btn_radio_label_background是什么?
其路径是android/frameworks/base/core/res/res/drawable-mdpi/btn_radio_label_background.9.png
可以看到是一个NinePatch图片,用来做背景,可以拉伸填充。
btn_radio是什么?
其路径是android/frameworks/base/core/res/res/drawable/btn_radio.xml
是个xml定义的drawable,打开看其内容:
定义了不同状态下radioButton长成什么样子。
如果不知道selector是什么,就要去看下Android SDK文档中Dev Guide->Application Resources->Resource Types。
以下面一个item为例:
<item android:state_checked="true" android:state_pressed="true"
android:drawable="@drawable/btn_radio_on_pressed" />
意思即为当radiobutton被选中时,并且被按下时,其Button应该长成btn_radio_on_pressed这个样子。
文件是android/frameworks/base/core/res/res/drawable-mdpi/btn_radio_on_pressed.png
drawable的item中可以有以下属性:
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_active=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"]
当按钮的状态和某个item匹配后,就会使用此item定义的drawable作为按钮图片。
从上面分析我们如果要修改RadioButton的外观,那么步骤应该是:
(1)制作一个9patch的图片作为背景图
准备一副PNG图片,其中白色为透明色,是否需要透明各人根据自己需要决定。
运行SDK/tools/draw9patch
在可伸缩的范围周围加上黑色的线告知系统这些区域可以伸缩。
制作完的图片,周围多了黑色线。
(2)针对不同的状态提供按钮图片
enabled, on: 紫色外框、红色中心点
enabled, off:只有紫色外框
enabled, on, pressed:黄色外框,红色中心点
enabled, off, pressed:黄色外框
disabled, on: 灰色外框、灰色中心点
disabled, off: 灰色外框
其余的状态此处就不再定义。
(3)使用xml描述一个drawable
在res/drawable/创建custom_radio_btn.xml
Item顺序是有讲究的,条件限定越细致,则应该放到前面。比如这儿如果把1,2行和3,4行的item交换,那么pressed的就永远无法触发了,因为有item已经满足条件返回了。可以理解为代码中的if语句。
(4)创建一个自定义的style,并应用到RaidioButton的style属性上
运行ap即可看到此RadioButton的外观已经改变,此demo可以看到文字被按钮遮盖了一部分,
这儿是因第一步制作9patch图片时没有留出按钮图片空间来,稍作修改即可。
详细代码请参加最后一个附件。
此时我们可以通过一些方法来修改。
本文只讨论外观修改,在系统控件上进行功能扩充的自定义控件另外讨论。
首先我们看下系统的RadioButton:
RadioButton长成什么样子是由其Background、Button等属性决定的,Android系统
使用style定义了默认的属性,在android源码
android/frameworks/base/core/res/res/values/styles.xml中可以看到默认的定义:
<style name="Widget.CompoundButton.RadioButton"> <item name="android:background">@android:drawable/btn_radio_label_background</item> <item name="android:button">@android:drawable/btn_radio</item> </style>
即其背景图是btn_radio_label_background,其button的样子是btn_radio
btn_radio_label_background是什么?
其路径是android/frameworks/base/core/res/res/drawable-mdpi/btn_radio_label_background.9.png
可以看到是一个NinePatch图片,用来做背景,可以拉伸填充。
btn_radio是什么?
其路径是android/frameworks/base/core/res/res/drawable/btn_radio.xml
是个xml定义的drawable,打开看其内容:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:state_window_focused="false" android:drawable="@drawable/btn_radio_on" /> <item android:state_checked="false" android:state_window_focused="false" android:drawable="@drawable/btn_radio_off" /> <item android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/btn_radio_on_pressed" /> <item android:state_checked="false" android:state_pressed="true" android:drawable="@drawable/btn_radio_off_pressed" /> <item android:state_checked="true" android:state_focused="true" android:drawable="@drawable/btn_radio_on_selected" /> <item android:state_checked="false" android:state_focused="true" android:drawable="@drawable/btn_radio_off_selected" /> <item android:state_checked="false" android:drawable="@drawable/btn_radio_off" /> <item android:state_checked="true" android:drawable="@drawable/btn_radio_on" /> </selector>
定义了不同状态下radioButton长成什么样子。
如果不知道selector是什么,就要去看下Android SDK文档中Dev Guide->Application Resources->Resource Types。
以下面一个item为例:
<item android:state_checked="true" android:state_pressed="true"
android:drawable="@drawable/btn_radio_on_pressed" />
意思即为当radiobutton被选中时,并且被按下时,其Button应该长成btn_radio_on_pressed这个样子。
文件是android/frameworks/base/core/res/res/drawable-mdpi/btn_radio_on_pressed.png
drawable的item中可以有以下属性:
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_active=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"]
当按钮的状态和某个item匹配后,就会使用此item定义的drawable作为按钮图片。
从上面分析我们如果要修改RadioButton的外观,那么步骤应该是:
(1)制作一个9patch的图片作为背景图
准备一副PNG图片,其中白色为透明色,是否需要透明各人根据自己需要决定。
运行SDK/tools/draw9patch
在可伸缩的范围周围加上黑色的线告知系统这些区域可以伸缩。
制作完的图片,周围多了黑色线。
(2)针对不同的状态提供按钮图片
enabled, on: 紫色外框、红色中心点
enabled, off:只有紫色外框
enabled, on, pressed:黄色外框,红色中心点
enabled, off, pressed:黄色外框
disabled, on: 灰色外框、灰色中心点
disabled, off: 灰色外框
其余的状态此处就不再定义。
(3)使用xml描述一个drawable
在res/drawable/创建custom_radio_btn.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/enabled_on_pressed" /> <item android:state_enabled="true" android:state_checked="false" android:state_pressed="true" android:drawable="@drawable/enabled_off_pressed" /> <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/enabled_on" /> <item android:state_enabled="true" android:state_checked="false" android:drawable="@drawable/enabled_off" /> <item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/disabled_on" /> <item android:state_enabled="false" android:state_checked="false" android:drawable="@drawable/disabled_off" /> </selector>
Item顺序是有讲究的,条件限定越细致,则应该放到前面。比如这儿如果把1,2行和3,4行的item交换,那么pressed的就永远无法触发了,因为有item已经满足条件返回了。可以理解为代码中的if语句。
(4)创建一个自定义的style,并应用到RaidioButton的style属性上
<style name="CustomRadioBtn"> <item name="android:background">@drawable/radio_btn_bg</item> <item name="android:button">@drawable/custom_radio_btn</item> </style>
运行ap即可看到此RadioButton的外观已经改变,此demo可以看到文字被按钮遮盖了一部分,
这儿是因第一步制作9patch图片时没有留出按钮图片空间来,稍作修改即可。
详细代码请参加最后一个附件。
- CustomWidgetStyle.rar (13.7 KB)
- 下载次数: 1286
评论
4 楼
独行者311
2012-09-06
感谢楼主分享。
3 楼
yangmaolinpl
2012-06-28
学习楼主,非常感谢。
2 楼
TenAclock
2012-02-10
学些了,谢谢作者分享~~
1 楼
zky314
2011-07-24
受益颇多啊,感谢。
发表评论
-
使用googleapi-client-java操作gtasks(二)
2012-03-29 15:34 4591对于很多第三方的机器没有安装Google账户管理,要访问GTa ... -
Android Activity 生命周期再验证
2011-11-22 16:20 7994Android Activity 生命活动 ... -
Nexus one开关键坏掉后的解决方法
2011-10-14 15:17 4476Nexus one手机无法开机了,网上搜索了一下发现很多人遇到 ... -
改包名导致JNI调用失败的问题
2011-08-31 13:41 5150修改以前的代码,移动了一个文件,修改了其包名,在这个文件代码中 ... -
使用googleapi-client-java操作gtasks(一)
2011-08-10 18:07 14818Google Tasks的API终于开放 ... -
一个好用的Google api调试网址
2011-08-09 11:00 1823https://code.google.com/apis/ex ... -
Apk文件Hack试验
2011-07-11 17:54 2862试验1:反编译dex文 ... -
一个由onKeyUp引起的问题
2011-04-19 16:05 1928刚写一个小程序,在用户按下Back按键返回时,需要保存一些数据 ... -
Android自定义组合控件
2011-03-20 18:56 12826目标:实现textview和ImageButton组合,可以通 ... -
也谈Android下一个apk安装多个程序入口图标
2011-03-18 11:28 9198Android中有的Ap功能比较复杂,为了方便用户使用,可以提 ... -
Android AppWidget实例验证
2011-02-25 15:26 133241.创建AppWidget布局,包含两个TextView用来显 ... -
Android Activity LaunchMode 验证
2011-02-23 15:04 8266在Android中,每个Activity有4种LaunchMo ... -
文件夹权限引起的MediaPlayer播放不正常
2011-01-20 20:41 2306写了一个Ap,在程序运行时会解压一些声音文件到/data/da ... -
关于使用InputStreamReader读取GBK编码文件乱码的问题
2011-01-19 17:13 25753BufferedReader reader = new Buf ... -
Android下Listview的onItemClick以及onItemLongClick等易模糊问题验证
2010-12-23 21:10 22768最近在使用Listview又遇到了以前碰到的问题,当Listv ... -
通过Java annotation以及反射机制实现不同类型通用的数据库访问接口
2010-12-22 12:14 5489在日常开发中会遇到这 ... -
Android PreferenceActivity 学习笔记
2010-12-11 12:45 20029在Ap中有时需要设置一些配置参数,这些参数通过配置文件保存。 ... -
Android平台sqlite快速入门
2010-12-07 12:00 2341以下概念都是在Android平台的sqlite3限制下的理解: ... -
Android下使用googleapi-client-java操作google calendar(三)
2010-11-29 18:57 47734.获取日历列表并显示: 原理:向https://www. ... -
Android下使用googleapi-client-java操作google calendar(二)
2010-11-28 22:50 23573.与服务器进行数据交互: 交互是通过HTTP请求及响应来进 ...
相关推荐
有时,原生控件不能满足我们对于外观和功能的需求,这时候可以自定义控件来定制外观或功能;有时,原生控件可以通过复杂的编码实现想要的功能,这时候可以自定义控件来提高代码的可复用性。 如何自定义控件 下面我...
VerifyCodeView是一个用于输入验证码的Android自定义控件,它支持数字类型的验证码,支持自定义外观,并且支持短信验证码自动填充。 项目地址:VerifyCodeView 在项目中引入VerifyCodeView Gradle dependencies {...
因此笔者建议使用shape自定义View控件的外观。 建议理由:shape只能自定义简单形状和颜色填充,然而却有完美的边缘渲染,不会出现边缘锯齿或者模糊的廉价感,这一点对于android UI是十分重要的。并且shape的操作和...
当您超越 Android 开发的初级阶段时,您将需要学习如何使用自己的外观和感觉创建自己的控件。 Android 的内置组件化模型允许开发人员创建可用于构建 UI 的自定义组件。 为了我们的目的,复合控件将完成这项工作。 ...
适用于 Android 的智能自定义类 iOS 分段控件,具有卓越的自动处理框架和内容外观的能力。 支持任何颜色和大小的图像(带透明背景)作为图标。 该库将自动缩放图标图像的大小并替换颜色以匹配不同的样式。 支持...
Android LoopView是用于无限旋转图片的强大小部件,它提供了一些配置选项并很好地控制了外观和操作要求。 简单用法图片: 自定义布局用法图片: 在应用程序中使用LoopView 如果使用Gradle进行构建,只需build....
flex android 移动开发 flex4.5手机应用开发.pdf 讲述的很详细,值得一看。 第 1 章: 入门 手机应用程序入门 手机、桌面和浏览器应用程序开发的差异 第 2 章: 开发环境 ...应用自定义手机外观 ..........
3.8.2 通过自定义渲染器自定义控件 142 第4章 表 148 4.1 表视图 148 4.1.1 表视图的使用情况 148 4.1.2 表视图的结构 148 4.1.3 表视图的内容填充 148 4.2 列表视图的填充 154 4.2.1 普通列表视图的内容...
该库基于Android的SeekBar控件进行扩展,允许用户通过滑动条来调整音量大小。 主要特点: 1. 高度可定制:提供了丰富的API,可以根据您的需求自定义SeekBar的外观和交互效果。 2. 灵活性和可扩展性:支持在代码中...
ReoGrid快速而强大的开源.NET电子表格组件https://reogrid.net文档https://reogrid.net/documents快照从Excel打印设置图表...自定义控件外观脚本和宏执行许可证MIT许可证版权所有(c)Jingwood&unvell.com 2012 -2019...
应用自定义手机外观 第 7 章: 运行和调试手机应用程序 管理启动配置 在桌面上运行和调试手机应用程序 在设备上运行和调试手机应用程序 第 8 章: 打包并导出手机应用程序 导出用于发行的 Android APK 包 导出用于...
曲线控件还支持自定义样式和主题,开发者可以根据自己的需求来调整控件的外观和风格,使其与应用程序的整体风格保持一致。此外,控件还具有良好的兼容性,可以适配不同尺寸的屏幕和不同版本的安卓系统。
但是在android中并没有现成的控件可用,不过android中有着功能类似但UI相差很大的RadioGroup控件,可以通过定义RadioGroup的外观来达到相同的目的。其实android中也没有TabBar,但是很多app通过修改RadioGroup来实现...
网格 快速强大的开源.NET电子表格组件文件资料快照从Excel读取 列印设定 图表 细胞冻结 单元格类型和控件 组和大纲 自定义控件外观 脚本和宏执行执照麻省理工学院执照版权所有(c)Jingwood&unvell.com 2012-2019,...
注意:如果您不喜欢控件包装方法,也可以通过随附的UIDownPicker类将其用作自定义控件:请阅读以下段落以获取更多信息。它是如何工作的DownPicker本质上是一个控件接口包装器,这意味着您不会将其用作控件-它将使用...
在 Android 和 iOS 中都是“分段控件”的示例控件。... 对于 Android,我们必须通过自定义呈现单选按钮控件来“伪造”它,以赋予它正确的外观和感觉。 远非完美,但绝对愿意接受有关如何改进它的建议。
Android自定义切换按钮获取有关代码的教程。 通常,在创建Android应用程序期间,开发人员将需要创建一个设置页面。 这允许应用程序的用户更改将保留到下一个会话的应用程序设置,例如“启用我的位置”或“显示地图...
精仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果 ——TimePickerView 时间选择器,支持年月日时分,年月日,年月,时分等格式 ——OptionsPickerView 选项选择器,支持一,二,三级选项选择,...
ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成... 在android开发中ListView是比
有两种方法可以改变app的外观。第一种就是直接在xml中直接修改View的属性。这种方法只适合于只有几个View和Activity的简单app。第二种方法就是创建自定义的样式和主题。如果你对web开发熟悉,第一种方法类似于使用...